Bootstrap e Inferência Não Paramétrica

Reamostragem aplicada a dados agronômicos
Introdução à Estatística

Luiz Diego Vidal Santos

Universidade Estadual de Feira de Santana (UEFS)

Visão Geral

Tópicos Principais

  • 1 Por que Bootstrap? Motivação e histórico
  • 2 Conceitos: reamostragem com reposição
  • 3 Bootstrap não paramétrico - passo a passo
  • 4 Intervalos de confiança via Bootstrap
  • 5 Laboratório em R com o pacote boot
  • 6 Exercício com dados de biomassa vegetal

Objetivo Central

Compreender o método bootstrap como alternativa não paramétrica para inferência estatística e aplicá-lo em R a dados reais de agronomia.

1 - POR QUE BOOTSTRAP?

Limitações da inferência clássica

A inferência paramétrica tradicional exige pressupostos fortes:

  • Distribuição normal dos dados
  • Amostras grandes (teorema central do limite)
  • Conhecimento do parâmetro de variância

Na prática agronômica:

  • Amostras pequenas (\(n < 30\)) são comuns
  • Dados de solo, biomassa e produção frequentemente não são normais
  • Distribuições assimétricas e com outliers

A proposta de Efron (1979)

“Deixe os dados falarem por si mesmos”

Bradley Efron propôs usar os próprios dados como população de referência, gerando múltiplas amostras por reamostragem com reposição.

Resultado: inferência sem necessidade de assumir distribuição teórica.

O que é Bootstrap?

Definição formal:

Dado um conjunto de dados observados \(\mathbf{x} = (x_1, x_2, \ldots, x_n)\), o bootstrap consiste em:

  1. Gerar \(B\) amostras \(\mathbf{x}^{*}_1, \mathbf{x}^{*}_2, \ldots, \mathbf{x}^{*}_B\), cada uma obtida por sorteio com reposição de \(n\) elementos de \(\mathbf{x}\)
  2. Calcular a estatística de interesse \(\hat{\theta}^{*}_b\) em cada amostra
  3. Usar a distribuição de \(\hat{\theta}^{*}_1, \ldots, \hat{\theta}^{*}_B\) para estimar o erro padrão e o intervalo de confiança de \(\hat{\theta}\)

2 - BOOTSTRAP NÃO PARAMÉTRICO

Algoritmo passo a passo

Passo Ação
1 Obtenha a amostra original com \(n\) observações
2 Sorteie \(n\) valores com reposição da amostra
3 Calcule a estatística desejada (média, mediana, etc.)
4 Repita os passos 2-3 por \(B\) vezes (\(B \geq 1000\))
5 Use as \(B\) estimativas para construir a distribuição bootstrap

Exemplo intuitivo

Amostra original: {4, 7, 3, 9, 5}

  • Reamostra 1: {7, 3, 3, 5, 9} → média = 5,4
  • Reamostra 2: {4, 9, 7, 7, 3} → média = 6,0
  • Reamostra 3: {5, 5, 4, 9, 4} → média = 5,4
  • …repita 1000 vezes

Tipos de intervalos de confiança

1. IC Percentil

\[IC_{1-\alpha} = \left[\hat{\theta}^{*}_{\alpha/2}, \; \hat{\theta}^{*}_{1-\alpha/2}\right]\]

Usa diretamente os quantis da distribuição bootstrap.

2. IC BCa (Bias-Corrected and Accelerated)

Corrige viés e assimetria da distribuição bootstrap. Recomendado para amostras pequenas e distribuições assimétricas.

3. IC Normal

\[IC = \hat{\theta} \pm z_{\alpha/2} \times SE_{boot}\]

Assume normalidade da distribuição bootstrap - geralmente válido para \(B\) grande.

3 - LABORATÓRIO EM R

Instalação e carregamento

# Instalar pacotes necessários (apenas na primeira vez)
install.packages(c("boot", "ggplot2"))

# Carregar pacotes
library(boot)
library(ggplot2)

O pacote boot (Canty & Ripley) é a implementação de referência em R, baseada no livro Bootstrap Methods and Their Application (Davison & Hinkley, 1997).

Dados de biomassa vegetal

# Dados simulados: massa seca (g) de plantas
# em experimento com adubação orgânica
set.seed(2026)
biomassa <- data.frame(
  tratamento = rep(c("Controle", "Adubo_Org"), each = 15),
  massa_g = c(
    rnorm(15, mean = 12.3, sd = 3.1),  # controle
    rnorm(15, mean = 16.8, sd = 4.2)   # adubação
  )
)
head(biomassa)

Contexto experimental

  • Cultura: feijão-caupi
  • Delineamento: 2 tratamentos × 15 repetições
  • Variável: massa seca da parte aérea (g)
  • Pergunta: A adubação orgânica aumenta a biomassa?

Bootstrap da média - Controle

# Função estatística para o boot()
media_func <- function(dados, indices) {
  return(mean(dados[indices]))
}

# Extrair dados do grupo controle
controle <- biomassa$massa_g[biomassa$tratamento == "Controle"]

# Bootstrap com B = 2000 reamostragens
set.seed(42)
boot_controle <- boot(data = controle,
                      statistic = media_func,
                      R = 2000)

# Resultado
print(boot_controle)

Intervalo de confiança

# IC por três métodos
boot.ci(boot_controle, conf = 0.95, type = c("norm", "perc", "bca"))

Interpretação: se o IC de 95% para a diferença entre tratamentos não inclui zero, há evidência de que o adubo orgânico teve efeito significativo sobre a biomassa, sem depender da suposição de normalidade.

Visualizando a distribuição bootstrap

# Converter para data.frame
boot_df <- data.frame(media_boot = boot_controle$t)

# Histograma com ggplot2
ggplot(boot_df, aes(x = media_boot)) +
  geom_histogram(aes(y = after_stat(density)),
                 bins = 40, fill = "#034EA2", alpha = 0.7) +
  geom_density(color = "red", linewidth = 1) +
  geom_vline(xintercept = mean(controle),
             linetype = "dashed", color = "black") +
  labs(
    title = "Distribuição Bootstrap da Média (Controle)",
    subtitle = paste0("B = 2000 | Média original = ",
                      round(mean(controle), 2), " g"),
    x = "Média bootstrap (g)",
    y = "Densidade"
  ) +
  theme_minimal(base_size = 14)

Comparação entre tratamentos

# Bootstrap da diferença de médias
adubo <- biomassa$massa_g[biomassa$tratamento == "Adubo_Org"]

diff_func <- function(dados, indices) {
  d <- dados[indices, ]
  mean(d$massa_g[d$tratamento == "Adubo_Org"]) -
    mean(d$massa_g[d$tratamento == "Controle"])
}

set.seed(42)
boot_diff <- boot(data = biomassa,
                  statistic = diff_func,
                  R = 2000)

# IC da diferença
boot.ci(boot_diff, conf = 0.95, type = "bca")

Se o IC BCa da diferença não inclui 0 → a adubação orgânica teve efeito significativo na biomassa.

Quando usar Bootstrap?

✅ Indicado

  • Amostras pequenas (\(n < 30\))
  • Distribuições não normais
  • Estatísticas sem fórmula analítica para erro padrão (mediana, razões)
  • Modelos de mediação e moderação
  • Complemento a testes paramétricos

⚠️ Cuidado

  • Não substitui delineamento experimental adequado
  • \(B\) deve ser suficiente (mínimo 1000, ideal 5000+)
  • Amostras muito pequenas (\(n < 5\)) - bootstrap pode ser instável
  • Dados com dependência temporal (exige bootstrap em bloco)

Exercício proposto

Atividade

  1. Carregue o dataset iris do R
  2. Aplique bootstrap (\(B = 2000\)) para estimar a mediana do comprimento da pétala (Petal.Length) por espécie
  3. Calcule o IC BCa de 95% para cada espécie
  4. Gere histogramas das distribuições bootstrap
  5. Compare com o IC obtido pelo teste \(t\) clássico

Dica de código

mediana_func <- function(d, i) {
  median(d[i])
}

Aplique para cada espécie usando subset() ou dplyr::filter().

Referências

  • Efron, B. (1979). Bootstrap methods: Another look at the jackknife. Annals of Statistics, 7(1), 1-26.
  • Efron, B., & Tibshirani, R. J. (1993). An Introduction to the Bootstrap. Chapman & Hall.
  • Davison, A. C., & Hinkley, D. V. (1997). Bootstrap Methods and Their Application. Cambridge University Press.
  • Canty, A., & Ripley, B. D. (2024). boot: Bootstrap R Functions. R package.

Obrigado!

Luiz Diego Vidal Santos

Universidade Estadual de Feira de Santana (UEFS)